package com.pig4cloud.pigx.common.customize.redis.constants;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.concurrent.TimeUnit;

/**
 * Redis缓存key常量声明
 *
 * @since 2022/11/1 18:32
 */
@Getter
@AllArgsConstructor
public enum RedisKeyEnum {

    // -------- 配置缓存-开始 --------

    /**
     * 持久化缓存前缀
     * <p>persistent_cache:持久化缓存名称
     */
    PERSISTENT_CONFIG_PREFIX("", "persistent_cache:%s", null, null),

    /**
     * 平台缓存（hash）
     */
    PLATFORM(PERSISTENT_CONFIG_PREFIX.getKey(), "platform", null, null),

    /**
     * 币对缓存（hash）
     */
    SYMBOL(PERSISTENT_CONFIG_PREFIX.getKey(), "symbol", null, null),

    /**
     * 产品缓存（hash）
     */
    PRODUCT(PERSISTENT_CONFIG_PREFIX.getKey(), "product", null, null),

    /**
     * 策略组-合约缓存（hash）
     */
    STRATEGY_GROUP_CONTRACT(PERSISTENT_CONFIG_PREFIX.getKey(), "strategy_group_contract", null, null),

    /**
     * 策略-合约缓存（hash）
     */
    STRATEGY_CONTRACT(PERSISTENT_CONFIG_PREFIX.getKey(), "strategy_contract", null, null),

    /**
     * 策略-任务缓存（hash）
     */
    STRATEGY_TASK_CONTRACT(PERSISTENT_CONFIG_PREFIX.getKey(), "strategy_task_contract", null, null),

    /**
     * 策略-订单缓存（hash）
     */
    STRATEGY_ORDER_CONTRACT(PERSISTENT_CONFIG_PREFIX.getKey(), "strategy_order_contract", null, null),

    /**
     * 策略-止盈止损委托缓存（hash）
     */
    STRATEGY_STOP_ORDER_CONTRACT(PERSISTENT_CONFIG_PREFIX.getKey(), "strategy_stop_order_contract", null, null),

    /**
     * 用户绑定API信息（hash）
     * <p>key的格式：用户id_平台id
     */
    USER_API(PERSISTENT_CONFIG_PREFIX.getKey(), "user_api", null, null),

    // -------- 配置缓存-结束 --------
    /**
     * 计数
     */
    INCR_HASH_PREFIX("", "count_hash", null, null),

    /**
     * 策略-订单同步次数统计（hash）
     */
    STRATEGY_ORDER_CONTRACT_SYNC_COUNT(INCR_HASH_PREFIX.getKey(), "strategy_order_contract_sync_count", null, null),

    /**
     * 策略-止盈止损同步次数统计（hash）
     */
    STRATEGY_STOP_ORDER_CONTRACT_SYNC_COUNT(INCR_HASH_PREFIX.getKey(), "strategy_order_stop_contract_sync_count", null, null),

    /**
     * 归集相关定时任务配置 （hash）
     */
    TIMING_CONFIG(PERSISTENT_CONFIG_PREFIX.getKey(), "timing_config", null, null);

    /**
     * redis缓存的hashKey名称
     */
    private final String hashKey;
    /**
     * redis缓存的key名称
     */
    private final String key;
    /**
     * redis缓存的过期时间
     */
    private final Long expire;
    /**
     * redis缓存的过期时间单位
     */
    private final TimeUnit expireUnit;

    /**
     * 获得持久化缓存的key
     *
     * @return {@link String}
     * @since 2022/11/24 14:05
     */
    public String getPersistentCacheKey() {
        return String.format(PERSISTENT_CONFIG_PREFIX.key, key);
    }

    /**
     * 获得计数缓存的key
     *
     * @return {@link String}
     * @since 2022/11/24 14:05
     */
    public String getIncrCacheKey() {
        return String.format(INCR_HASH_PREFIX.key, key);
    }
}
